const axios = require('axios');
const cheerio = require('cheerio');

interface NutritionItem {
    name: string;
    currentContent: string;
    recommendedAmount: string;
}

interface NutritionChartItem { 
    value: number;
    name: string; 
}

interface NourishmentData {
    calNum: string;
    calRecommend: string;
    nutritiveTags: string[];
    nutritionList: NutritionItem[];
    comment: string;
    nutritionChart: NutritionChartItem[];  // 保留 value 和 name
}

// 根据食材获取食谱列表 
export const getFdList = async (req: any, res: any) => {
    const { keyword, secondary_keyword, offset } = req.body;  // 从请求参数中获取 keyword 和 secondary_keyword
    console.log('接收到的参数:', { keyword, secondary_keyword, offset });

    // 动态拼接 URL
    const url = `https://apis.netstart.cn/douguo/recipe/search?keyword=${encodeURIComponent(keyword)}&order=3&type=0&secondary_keyword=${encodeURIComponent(secondary_keyword)}&offset=${encodeURIComponent(offset)}&limit=20`;
    console.log('发起请求的地址', url)
    try {
        // 发起 GET 请求
        const response = await axios.get(url);
        res.json({
            message: "获取成功！",
            data: response.data
        });  // 将数据返回给客户端
    } catch (error) {
        console.error('请求错误:', error);
        res.status(500).json({ error: '请求失败' });
    }
};

// 获取食谱详情 
export const getFdDetail = async (req: any, res: any) => {
    const { id } = req.body;  // 从请求参数中获取 keyword 和 secondary_keyword
    console.log('接收到的参数:', { id });

    // 动态拼接 URL
    const url = `https://apis.netstart.cn/douguo/recipe/detail/${encodeURIComponent(id)}`;
    console.log('发起请求的地址', url)
    try {
        // 发起 GET 请求
        const response = await axios.get(url);
        res.json({
            message: "获取成功！",
            data: response.data
        });  // 将数据返回给客户端
    } catch (error) {
        console.error('请求错误:', error);
        res.status(500).json({ error: '请求失败' });
    }
};

// 获取食谱的营养结构 
export const getNourishment = async (req: any, res: any) => {
    const { id } = req.body;  // 获取请求体中的id参数
    console.log('接收到的参数:', { id });

    // 拼接 URL
    const url = `https://apis.netstart.cn/douguo/recipe/nutrient/${encodeURIComponent(id)}`;
    console.log('发起请求的地址', url);

    try {
        // 发起 GET 请求
        const response = await axios.get(url);
        const $ = cheerio.load(response.data);  // 使用 cheerio 解析 HTML 数据

        // 提取 cal-analysis 里面的内容
        const calNum: string = $('.cal-analysis .cal-num span').text().trim();  // 获取 cal-num 里的值
        const calRecommend: string = $('.cal-analysis .cal-recommend span').text().trim();  // 获取 cal-recommend 里的值

        // 提取 nutritive 里面的营养特点
        const nutritiveTags: string[] = [];
        $('.nutritive .nutr-characteristics .item-tag a').each((i: any, el: any) => {
            nutritiveTags.push($(el).text().trim());  // 获取 a 标签中的文字
        });

        // 提取 nutr-list 里面的营养元素含量
        const nutritionList: NutritionItem[] = [];
        $('.nutr-list .nutr-item').each((i: any, el: any) => {
            const name: string = $(el).find('.name').text().trim();  // 获取营养元素的名称
            const currentContent: string = $(el).find('.quantity').text().replace('当前含量', '').trim();  // 获取当前含量并去除 '当前含量' 部分
            const recommendedAmount: string = $(el).find('.right').last().text().trim();  // 获取推荐摄入量
            nutritionList.push({
                name,
                currentContent,
                recommendedAmount,
            });
        });

        // 提取豆果评价
        const comment: string = $('.comment .dg-comm').text().trim();  // 获取评价内容

        // 提取 nutritionChart 数据
        const nutritionChart: NutritionChartItem[] = [];
        const scriptContent = $('script').html(); // 获取整个页面的所有 script 标签内容

        if (scriptContent) {
            const chartDataMatch = scriptContent.match(/data:\s*(\[[^\]]*\])/);  // 匹配 data: 后的数组内容
            if (chartDataMatch) {
                const chartData = JSON.parse(chartDataMatch[1]);  // 解析 JSON 数组
                chartData.forEach((item: { value: number, name: string }) => {
                    nutritionChart.push({
                        value: item.value,
                        name: item.name
                    });  // 保留 value 和 name
                });
            }
        }

        // 将提取到的数据组织成 JSON
        const result: NourishmentData = {
            calNum,
            calRecommend,
            nutritiveTags,
            nutritionList,
            comment,
            nutritionChart,  // 添加 nutritionChart 数据
        };

        res.json({
            message: "获取成功！",
            data: result,  // 返回数据
        }); 
    } catch (error) {
        console.error('请求错误:', error);
        res.status(500).json({ error: '请求失败' });
    }
}; 

